muda
Menu Utilities library for Desktop Applications.
Platforms supported:
- Windows
- macOS
- Linux (gtk Only)
Platform-specific notes:
- On Windows, accelerators don't work unless the win32 message loop calls
TranslateAcceleratorW
. SeeMenu::init_for_hwnd
for more details
Cargo Features
common-controls-v6
: UseTaskDialogIndirect
API fromComCtl32.dll
v6 on Windows for showing the predefinedAbout
menu item dialog.libxdo
: Enables linking tolibxdo
on Linux which is used for the predfinedCopy
,Cut
,Paste
andSelectAll
menu item.serde
: Enables de/serializing the dpi types.
Dependencies (Linux Only)
gtk
is used for menus and libxdo
is used to make the predfined Copy
, Cut
, Paste
and SelectAll
menu items work. Be sure to install following packages before building:
Arch Linux / Manjaro:
Debian / Ubuntu:
Example
Create the menu and add your items
let menu = new;
let menu_item2 = new;
let submenu = with_items;
Then add your root menu to a Window on Windows and Linux or use it as your global app menu on macOS
// --snip--
unsafe ;
menu.init_for_gtk_window;
menu.init_for_nsapp;
Context menus (Popup menus)
You can also use a [Menu
] or a [Submenu
] show a context menu.
// --snip--
let position = PhysicalPosition ;
unsafe ;
menu.show_context_menu_for_gtk_window;
unsafe ;
Processing menu events
You can use MenuEvent::receiver
to get a reference to the MenuEventReceiver
which you can use to listen to events when a menu item is activated
if let Ok = receiver.try_recv
License
Apache-2.0/MIT